﻿using System;
using System.Collections.Generic;
using System.Text;

using Channelvn.Cached;
using Channelvn.Cached.Base;
using Channelvn.Cached.Common;

namespace Channelvn.Cached.CacheObjects.ControlCached
{
    public class LastestNews : HtmlControlCacheBase
    {
        public LastestNews(CacheSettings.ControlSetting controlSetting)
            : base(controlSetting)
        {
        }

        protected override string ParentCategory
        {
            get
            {
                return Constants.PARENT_CATEGORY_FOR_NEWS_DETAIL_CACHE;
            }
        }

        protected override string CacheName
        {
            get
            {
                return string.Format(Constants.CACHE_NAME_FORMAT_HTML_CONTROL_CONTENT, _controlSetting.ContainerID, Lib.QueryString.ZoneID, Lib.QueryString.NewsID, 0, 0);
            }
        }

        protected override string CurrentCache
        {
            get
            {
                // Lấy danh sách các newsId trong danh sách top 10 tin mới nhất của cat hiện tại
                string topNewsID = "";
                if (!string.IsNullOrEmpty(this._controlSetting.Category))
                {
                    topNewsID = CacheController.Get<string>(this._controlSetting.Category, string.Format(Constants.CACHE_NAME_TOP_NEWS_ID, Lib.QueryString.ZoneID));
                }
                else
                {
                    topNewsID = CacheController.Get<string>(string.Format(Constants.CACHE_NAME_TOP_NEWS_ID, Lib.QueryString.ZoneID));
                }

                // Nếu không có tin mới nhất nào thì coi như không có cache
                if (string.IsNullOrEmpty(topNewsID)) return "";

                // Chuẩn hóa
                if (!topNewsID.StartsWith(",")) topNewsID = "," + topNewsID;
                if (!topNewsID.EndsWith(",")) topNewsID = topNewsID + ",";

                string newsId = Lib.QueryString.NewsID.ToString();

                // Có NewsID hiện tại trong danh sách thì lấy cache tin mới nhất của tin
                if (topNewsID.IndexOf("," + newsId + ",") >= 0)
                {
                    if (!string.IsNullOrEmpty(this._controlSetting.Category))
                    {
                        return CacheController.Get<string>(this._controlSetting.Category, CacheName);
                    }
                    else
                    {
                        return CacheController.Get<string>(Constants.PARENT_CATEGORY_FOR_NEWS_DETAIL_CACHE, CacheName);
                    }
                }
                else // Nếu không có NewsID hiện tại trong danh sách thì lấy cache tin mới nhất chung
                {
                    string cacheLastestNewsByCatId = string.Format(Constants.CACHE_NAME_FORMAT_HTML_CONTROL_CONTENT, _controlSetting.ContainerID, Lib.QueryString.ZoneID, 0, 0, 0);
                    if (!string.IsNullOrEmpty(this._controlSetting.Category))
                    {
                        return CacheController.Get<string>(this._controlSetting.Category, cacheLastestNewsByCatId);
                    }
                    else
                    {
                        return CacheController.Get<string>(Constants.PARENT_CATEGORY_FOR_NEWS_DETAIL_CACHE, cacheLastestNewsByCatId);
                    }
                }
            }
        }
    }
}
